Virtualization allows multiplexing of the underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor or a host operating system. The hypervisor emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer.
Virtual machines can be provided by a centralized host that is coupled to multiple clients over a network. Each client can provide a virtual desktop environment indistinguishable from a physical desktop. In a system where clients are spread over several geographical locations, such as an organization that has multiple offices, each location can have a centralized host that provides virtual machines to its local users at the same location. The virtual machine images are stored in the local data storage at each location. In some scenarios, the images of virtual machines may be transferred from one location to another location over the network. For example, the transfer may occur for backup purposes or when the user of a virtual machine moves from one location to another. Transferring the virtual machine images typically consumes a significant amount of network bandwidth and the transmission can be slow.